GtkTreePath *path);
void _gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
- const GdkRectangle *expose_area,
guint flags);
void _gtk_tree_view_column_get_focus_area (GtkTreeViewColumn *tree_column,
const GdkRectangle *background_area,
gboolean left,
gboolean right);
void _gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
- const GdkRectangle *expose_area,
guint flags);
void _gtk_tree_view_column_cell_set_dirty (GtkTreeViewColumn *tree_column,
gboolean install_handler);
gint grid_line_width;
gboolean got_pointer = FALSE;
gboolean draw_vgrid_lines, draw_hgrid_lines;
+ cairo_t *cr;
rtl = (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL);
if (event->area.height < 0)
return TRUE;
+ cr = gdk_cairo_create (event->window);
+ gdk_cairo_region (cr, event->region);
+ cairo_clip (cr);
+
validate_visible_area (tree_view);
style = gtk_widget_get_style (widget);
}
if (node == NULL)
- return TRUE;
+ {
+ cairo_destroy (cr);
+ return TRUE;
+ }
/* find the path for the node */
path = _gtk_tree_view_find_path ((GtkTreeView *)widget,
cell_area.y + cell_area.height / 2);
else
_gtk_tree_view_column_cell_render (column,
- event->window,
+ cr,
&background_area,
&cell_area,
- &event->area,
flags);
if (TREE_VIEW_DRAW_EXPANDERS(tree_view)
&& (node->flags & GTK_RBNODE_IS_PARENT) == GTK_RBNODE_IS_PARENT)
cell_area.y + cell_area.height / 2);
else
_gtk_tree_view_column_cell_render (column,
- event->window,
+ cr,
&background_area,
&cell_area,
- &event->area,
flags);
}
(column == tree_view->priv->edited_column)))
{
_gtk_tree_view_column_cell_draw_focus (column,
- event->window,
+ cr,
&background_area,
&cell_area,
- &event->area,
flags);
}
if (drag_dest_path)
gtk_tree_path_free (drag_dest_path);
+ cairo_destroy (cr);
+
return FALSE;
}
if (gtk_tree_view_column_cell_is_visible (column))
{
if (is_separator)
- gtk_paint_hline (style,
- drawable,
- GTK_STATE_NORMAL,
- &cell_area,
- widget,
- NULL,
- cell_area.x,
- cell_area.x + cell_area.width,
- cell_area.y + cell_area.height / 2);
+ gtk_cairo_paint_hline (style,
+ cr,
+ GTK_STATE_NORMAL,
+ widget,
+ NULL,
+ cell_area.x,
+ cell_area.x + cell_area.width,
+ cell_area.y + cell_area.height / 2);
else
_gtk_tree_view_column_cell_render (column,
- drawable,
+ cr,
&background_area,
&cell_area,
- &expose_area,
0);
}
cell_offset += column->width;
static gboolean
gtk_tree_view_column_cell_process_action (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
guint flags,
gint action,
- const GdkRectangle *expose_area, /* RENDER */
GdkRectangle *focus_rectangle, /* FOCUS */
GtkCellEditable **editable_widget, /* EVENT */
GdkEvent *event, /* EVENT */
GList *list;
GdkRectangle real_cell_area;
GdkRectangle real_background_area;
- GdkRectangle real_expose_area = *cell_area;
gint depth = 0;
gint expand_cell_count = 0;
gint full_requested_width = 0;
/* RENDER */
if (action == CELL_ACTION_RENDER)
{
- gtk_cell_renderer_render (info->cell,
- window,
- tree_column->tree_view,
- &rtl_background_area,
- &rtl_cell_area,
- &real_expose_area,
- flags);
+ gtk_cell_renderer_render_cairo (info->cell,
+ cr,
+ tree_column->tree_view,
+ &rtl_background_area,
+ &rtl_cell_area,
+ flags);
}
/* FOCUS */
else if (action == CELL_ACTION_FOCUS)
/* RENDER */
if (action == CELL_ACTION_RENDER)
{
- gtk_cell_renderer_render (info->cell,
- window,
- tree_column->tree_view,
- &rtl_background_area,
- &rtl_cell_area,
- &real_expose_area,
- flags);
+ gtk_cell_renderer_render_cairo (info->cell,
+ cr,
+ tree_column->tree_view,
+ &rtl_background_area,
+ &rtl_cell_area,
+ flags);
}
/* FOCUS */
else if (action == CELL_ACTION_FOCUS)
/**
* gtk_tree_view_column_cell_render:
* @tree_column: A #GtkTreeViewColumn.
- * @window: a #GdkDrawable to draw to
+ * @cr: cairo context to draw to
* @background_area: entire cell area (including tree expanders and maybe padding on the sides)
* @cell_area: area normally rendered by a cell renderer
- * @expose_area: area that actually needs updating
* @flags: flags that affect rendering
*
* Renders the cell contained by #tree_column. This is used primarily by the
**/
void
_gtk_tree_view_column_cell_render (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
- const GdkRectangle *expose_area,
guint flags)
{
g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
+ g_return_if_fail (cr != NULL);
g_return_if_fail (background_area != NULL);
g_return_if_fail (cell_area != NULL);
- g_return_if_fail (expose_area != NULL);
+
+ cairo_save (cr);
gtk_tree_view_column_cell_process_action (tree_column,
- window,
+ cr,
background_area,
cell_area,
flags,
CELL_ACTION_RENDER,
- expose_area,
NULL, NULL, NULL, NULL);
+
+ cairo_restore (cr);
}
gboolean
g_return_val_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column), FALSE);
return gtk_tree_view_column_cell_process_action (tree_column,
- NULL,
+ NULL,
background_area,
cell_area,
flags,
CELL_ACTION_EVENT,
- NULL, NULL,
+ NULL,
editable_widget,
event,
path_string);
cell_area,
0,
CELL_ACTION_FOCUS,
- NULL,
focus_area,
NULL, NULL, NULL);
}
void
_gtk_tree_view_column_cell_draw_focus (GtkTreeViewColumn *tree_column,
- GdkWindow *window,
+ cairo_t *cr,
const GdkRectangle *background_area,
const GdkRectangle *cell_area,
- const GdkRectangle *expose_area,
guint flags)
{
gint focus_line_width;
GtkStateType cell_state;
g_return_if_fail (GTK_IS_TREE_VIEW_COLUMN (tree_column));
+ g_return_if_fail (cr != NULL);
+
gtk_widget_style_get (GTK_WIDGET (tree_column->tree_view),
"focus-line-width", &focus_line_width, NULL);
if (tree_column->editable_widget)
{
GdkRectangle focus_rectangle;
gtk_tree_view_column_cell_process_action (tree_column,
- window,
+ cr,
background_area,
cell_area,
flags,
CELL_ACTION_FOCUS,
- expose_area,
&focus_rectangle,
NULL, NULL, NULL);
cell_state = flags & GTK_CELL_RENDERER_SELECTED ? GTK_STATE_SELECTED :
(flags & GTK_CELL_RENDERER_PRELIT ? GTK_STATE_PRELIGHT :
(flags & GTK_CELL_RENDERER_INSENSITIVE ? GTK_STATE_INSENSITIVE : GTK_STATE_NORMAL));
- gtk_paint_focus (gtk_widget_get_style (tree_column->tree_view),
- window,
- cell_state,
- cell_area,
- tree_column->tree_view,
- "treeview",
- focus_rectangle.x,
- focus_rectangle.y,
- focus_rectangle.width,
- focus_rectangle.height);
+ gtk_cairo_paint_focus (gtk_widget_get_style (tree_column->tree_view),
+ cr,
+ cell_state,
+ tree_column->tree_view,
+ "treeview",
+ focus_rectangle.x,
+ focus_rectangle.y,
+ focus_rectangle.width,
+ focus_rectangle.height);
}
}